home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 1997 / HAM Radio 1997.iso / vcls / moden / adprotcl.int < prev    next >
Text File  |  1996-04-08  |  30KB  |  767 lines

  1. {Conditional defines that may affect this unit}
  2. {$I AWDEFINE.INC}
  3.  
  4. {Required options}
  5. {$I+,G+,X+,F+,V-}                                                      {!!.01}
  6. {$C MOVEABLE,DEMANDLOAD,DISCARDABLE}
  7.  
  8. {*********************************************************}
  9. {*                  ADPROTCL.PAS 1.01                    *}
  10. {*        Copyright (c) TurboPower Software 1995         *}
  11. {*                 All rights reserved.                  *}
  12. {*********************************************************}
  13.  
  14. unit AdProtcl;
  15.   {-File transfer protocol VCL component}
  16.  
  17. interface
  18.  
  19. uses
  20.   {!!.01 modified}
  21.   {-----RTL}
  22.   WinTypes,
  23.   WinProcs,
  24.   SysUtils,
  25.   Classes,
  26.   Messages,
  27.   Controls,
  28.   DsgnIntf,
  29.   Graphics,
  30.   Forms,
  31.   {-----APD}
  32.   OoMisc,
  33.   {$IFNDEF UseAPWDLL}
  34.   AwUser,
  35.   AwAbsPcl,
  36.   AwXmodem,
  37.   AwYmodem,
  38.   AwZmodem,
  39.   AwKermit,
  40.   AwBPlus,
  41.   AwAscii,
  42.   AdMisc,
  43.   {$ENDIF}
  44.   AdExcept,
  45.   AdPort;
  46.  
  47. {$IFNDEF UseAPWDLL}
  48. {$R APWP.RES}
  49. {$ENDIF}
  50.  
  51. {$IFDEF UseAPWDLL}
  52. {$I AWABSPCL.PA0}     {Abstract procedure/function declarations}
  53. {$I AWXMODEM.PA0}     {Xmodem procedure/function declarations}
  54. {$I AWYMODEM.PA0}     {Ymodem procedure/function declarations}
  55. {$I AWZMODEM.PA0}     {Zmodem procedure/function declarations}
  56. {$I AWKERMIT.PA0}     {Kermit procedure/function declarations}
  57. {$I AWBPLUS.PA0}      {B+ procedure/function declarations}
  58. {$I AWASCII.PA0}      {ASCII procedure/function declarations}
  59. {$ENDIF}
  60.  
  61. type
  62.   {Block check methods - NOTE! this must match OOMISC}
  63.   TBlockCheckMethod = (
  64.     bcmNone,
  65.     bcmChecksum,
  66.     bcmChecksum2,
  67.     bcmCrc16,
  68.     bcmCrc32,
  69.     bcmCrcK);
  70.  
  71.   {Protocol types - NOTE! this must match OOMISC}
  72.   TProtocolType = (
  73.     ptNoProtocol,
  74.     ptXmodem,
  75.     ptXmodemCRC,
  76.     ptXmodem1K,
  77.     ptXmodem1KG,
  78.     ptYmodem,
  79.     ptYmodemG,
  80.     ptZmodem,
  81.     ptKermit,
  82.     ptAscii,
  83.     ptBPlus);
  84.  
  85.   {Zmodem file management options - NOTE! this must match OOMISC}
  86.   TZmodemFileOptions = (
  87.     zfoNoOption,           {Place holder}
  88.     zfoWriteNewerLonger,   {Transfer if new, newer or longer}
  89.     zfoWriteCrc,           {Not supported, same as WriteNewer}
  90.     zfoWriteAppend,        {Transfer if new, append if exists}
  91.     zfoWriteClobber,       {Transfer regardless}
  92.     zfoWriteNewer,         {Transfer if new or newer}
  93.     zfoWriteDifferent,     {Transfer if new or diff dates/lens}
  94.     zfoWriteProtect);      {Transfer only if new}
  95.  
  96.   {Action to take if incoming file exists - NOTE! this must match OOMISC}
  97.   TWriteFailAction = (
  98.     wfWriteNone,         {No option set yet}
  99.     wfWriteFail,         {Fail the open attempt}
  100.     wfWriteRename,       {Rename the incoming file}
  101.     wfWriteAnyway,       {Overwrite the existing file}
  102.     wfWriteResume);      {Resume an interrupted receive}
  103.  
  104.   {ASCII end-of-line translations}
  105.   TAsciiEOLTranslation = (
  106.     aetNone,             {No CR/LF translations}
  107.     aetStrip,            {Strip CRs or LFs}
  108.     aetAddCRBefore,      {Add CR before each LF}
  109.     aetAddLFAfter);      {Add LF after each CR}
  110.  
  111.   {Dispatcher modes}
  112.   TDispatcherMode = (
  113.     dNone,               {Failed to enable dispatcher}
  114.     dTimer,              {Use the timer only}
  115.     dCommEvents,         {Use 3.1 style comm events and a timer}
  116.     dAuto);              {Use dCommEvents for 3.1, dTimer for 3.0}
  117.  
  118.   {DeleteFailed options for TApdProtocolLog}                           {!!.01}
  119.   TDeleteFailed = (dfNever, dfAlways, dfNonRecoverable);               {!!.01}
  120.  
  121. const
  122.   {Defaults for TApdProtocol properties}
  123.   DefProtocolType         = ptZmodem;
  124.   DefXYmodemBlockWait     = 91;
  125.   DefZmodemOptionOverride = False;
  126.   DefZmodemSkipNoFile     = False;
  127.   DefZmodemFileOption     = zfoWriteNewer;
  128.   DefZmodemRecover        = False;
  129.   DefZmodem8K             = False;
  130.   DefZmodemFinishRetry    = 0;
  131.   DefKermitMaxLen         = 80;
  132.   DefKermitMaxWindows     = 0;
  133.   DefKermitSWCTurnDelay   = 0;
  134.   DefKermitTimeoutSecs    = 5;
  135.   DefKermitPadCharacter   = ' ';
  136.   DefKermitPadCount       = 0;
  137.   DefKermitTerminator     = #13;
  138.   DefKermitCtlPrefix      = '#';
  139.   DefKermitHighbitPrefix  = 'Y';
  140.   DefKermitRepeatPrefix   = '~';
  141.   DefAsciiCharDelay       = 0;
  142.   DefAsciiLineDelay       = 0;
  143.   DefAsciiEOLChar         = #13;
  144.   DefAsciiCRTranslation   = aetNone;
  145.   DefAsciiLFTranslation   = aetNone;
  146.   DefAsciiEOFTimeout      = 364;      {20 seconds}
  147.   DefHonorDirectory       = False;
  148.   DefIncludeDirectory     = False;
  149.   DefRTSLowForWrite       = False;
  150.   DefAbortNoCarrier       = False;
  151.   DefBP2KTransmit         = False;
  152.   DefAsciiSuppressCtrlZ   = False;
  153.   DefFinishWait           = 364;
  154.   DefTurnDelay            = 0;
  155.   DefOverhead             = 0;
  156.   DefWriteFailAction      = wfWriteRename;
  157.   DefStatusInterval       = 18;
  158.  
  159.   {Defaults for TApdProtocolLog properties}
  160.   DefHistoryName       = 'APD.HIS';
  161.   DefDeleteFailed      = dfNonRecoverable;                             {!!.01}
  162.  
  163.   MaxKermitLongLen     = 1024;
  164.   MaxKermitWindows     = 27;
  165.  
  166.   {Status options}
  167.   apFirstCall          = OOMISC.apFirstCall;
  168.   apLastCall           = OOMISC.apLastCall;
  169.  
  170.   {General protocol status constants}
  171.   psOK                 = OOMISC.psOK;
  172.   psProtocolHandshake  = OOMISC.psProtocolHandshake;
  173.   psInvalidDate        = OOMISC.psInvalidDate;
  174.   psFileRejected       = OOMISC.psFileRejected;
  175.   psFileRenamed        = OOMISC.psFileRenamed;
  176.   psSkipFile           = OOMISC.psSkipFile;
  177.   psFileDoesntExist    = OOMISC.psFileDoesntExist;
  178.   psCantWriteFile      = OOMISC.psCantWriteFile;
  179.   psTimeout            = OOMISC.psTimeout;
  180.   psBlockCheckError    = OOMISC.psBlockCheckError;
  181.   psLongPacket         = OOMISC.psLongPacket;
  182.   psDuplicateBlock     = OOMISC.psDuplicateBlock;
  183.   psProtocolError      = OOMISC.psProtocolError;
  184.   psCancelRequested    = OOMISC.psCancelRequested;
  185.   psEndFile            = OOMISC.psEndFile;
  186.   psResumeBad          = OOMISC.psResumeBad;
  187.   psSequenceError      = OOMISC.psSequenceError;
  188.   psAbortNoCarrier     = OOMISC.psAbortNoCarrier;
  189.  
  190.   {Specific to certain protocols}
  191.   psGotCrcE            = OOMISC.psGotCrcE;
  192.   psGotCrcG            = OOMISC.psGotCrcG;
  193.   psGotCrcW            = OOMISC.psGotCrcW;
  194.   psGotCrcQ            = OOMISC.psGotCrcQ;
  195.   psTryResume          = OOMISC.psTryResume;
  196.   psHostResume         = OOMISC.psHostResume;
  197.   psWaitAck            = OOMISC.psWaitAck;
  198.  
  199.   {For specifying log file calls}
  200.   lfReceiveStart       = OOMISC.lfReceiveStart;
  201.   lfReceiveOk          = OOMISC.lfReceiveOk;
  202.   lfReceiveFail        = OOMISC.lfReceiveFail;
  203.   lfReceiveSkip        = OOMISC.lfReceiveSkip;
  204.   lfTransmitStart      = OOMISC.lfTransmitStart;
  205.   lfTransmitOk         = OOMISC.lfTransmitOk;
  206.   lfTransmitFail       = OOMISC.lfTransmitFail;
  207.   lfTransmitSkip       = OOMISC.lfTransmitSkip;
  208.  
  209. type
  210.   TApdCustomProtocol = class;
  211.   TApdProtocol = class;
  212.  
  213.   {Protocol event handlers}
  214.   TProtocolAcceptEvent   = procedure(CP : TObject;
  215.                                      var Accept : Boolean;
  216.                                      var FName : String) of object;
  217.   TProtocolErrorEvent    = procedure(CP : TObject; ErrorCode : SmallInt)
  218.                            of object;
  219.   TProtocolFinishEvent   = procedure(CP : TObject; ErrorCode : SmallInt)
  220.                            of object;
  221.   TProtocolLogEvent      = procedure(CP : TObject; Log : Word)
  222.                            of object;
  223.   TProtocolNextFileEvent = procedure(CP : TObject; var FName : String)
  224.                            of object;
  225.   TProtocolResumeEvent   = procedure(CP : TObject;
  226.                                      var Resume : TWriteFailAction)
  227.                            of object;
  228.   TProtocolStatusEvent   = procedure(CP : TObject; Options : Word)
  229.                            of object;
  230.  
  231.   {Abstract protocol status class}
  232.   TApdAbstractStatus = class(TComponent)
  233.   protected {private}
  234.     {.Z+}
  235.     FDisplay         : TForm;
  236.     FPosition        : TPosition;
  237.     FCtl3D           : Boolean;
  238.     FVisible         : Boolean;
  239.  
  240.   protected
  241.     FProtocol        : TApdCustomProtocol;
  242.  
  243.     procedure SetPosition(const NewPosition : TPosition);
  244.     procedure SetCtl3D(const NewCtl3D : Boolean);
  245.     procedure SetVisible(const NewVisible : Boolean);
  246.     procedure GetProperties;
  247.     procedure Show;
  248.  
  249.   public
  250.     constructor Create(AOwner : TComponent); override;
  251.       {-Create a TApdAbstractStatus component}
  252.     destructor Destroy;
  253.       {-Destroy a TApdAbstractStatus component}
  254.     {.Z-}
  255.     procedure UpdateDisplay(First, Last : Boolean); virtual; abstract;
  256.       {-Update the status display with current data}
  257.     procedure CreateDisplay; dynamic; abstract;
  258.       {-Create the status display}
  259.     procedure DestroyDisplay; dynamic; abstract;
  260.       {-Destroy the status display}
  261.  
  262.     property Display : TForm
  263.       read FDisplay write FDisplay;
  264.     property Protocol : TApdCustomProtocol
  265.       read FProtocol;
  266.  
  267.   published
  268.     property Position : TPosition
  269.       read FPosition write SetPosition;
  270.     property Ctl3D : Boolean
  271.       read FCtl3D write SetCtl3D;
  272.     property Visible : Boolean
  273.       read FVisible write SetVisible;
  274.   end;
  275.  
  276.   {Builtin log procedure}
  277.   TApdProtocolLog = class(TComponent)
  278.   protected {private}
  279.     {.Z+}
  280.     FDeleteFailed : TDeleteFailed;                                     {!!.01}
  281.     FHistoryName  : String;
  282.     FProtocol     : TApdCustomProtocol;
  283.  
  284.   public
  285.     constructor Create(AOwner : TComponent); override;
  286.       {-Create a TApdProtocolLog component}
  287.     {.Z-}
  288.     procedure UpdateLog(const Log : Word); virtual;
  289.       {-Add a log entry}
  290.  
  291.     property Protocol : TApdCustomProtocol
  292.       read FProtocol;
  293.  
  294.   published
  295.     property DeleteFailed : TDeleteFailed                              {!!.01}
  296.       read FDeleteFailed write FDeleteFailed default DefDeleteFailed;  {!!.01}
  297.     property HistoryName : String
  298.       read FHistoryName write FHistoryName;
  299.   end;
  300.  
  301.   {Protocol component}
  302.   TApdCustomProtocol = class(TComponent)
  303.   protected {private}
  304.     {.Z+}
  305.     {Private data}
  306.     PData             : PProtocolData;   {Protocol data}
  307.     NeedBPS           : Boolean;         {True if we don't know BPS yet}
  308.     ProtFunc          : TProtocolFunc;   {Current protocol function}
  309.     Force             : Boolean;         {True to force setting options}
  310.  
  311.     {Property data}
  312.     FMsgHandler       : HWnd;            {Window handler of MessageHandler}
  313.     FComPort          : TApdCustomComPort; {Comport to use}
  314.     FProtocolType     : TProtocolType;   {Current protocol}
  315.     FStatusDisplay    : TApdAbstractStatus; {Built-in status display}
  316.     FProtocolLog      : TApdProtocolLog; {Built-in protocol logging function}
  317.     FXYmodemBlockWait : Word;            {Inter-block delay in ticks}
  318.     FZmodemOptionOverride : Boolean;     {True to override transmitter options}
  319.     FZmodemSkipNoFile : Boolean;         {True to skip new incoming files}
  320.     FZmodemFileOption : TZmodemFileOptions; {File mgmt options}
  321.     FZmodemRecover    : Boolean;         {True to enable crash recovery}
  322.     FZmodem8K         : Boolean;         {True to enable 8K zmodem}
  323.     FZmodemFinishRetry : Word;           {Number of ZFin retries}
  324.     FKermitMaxLen     : Word;            {Max normal packet len}
  325.     FKermitMaxWindows : Word;            {Maximum number of windows}
  326.     FKermitSWCTurnDelay : Word;          {Turn delay when SWC in use}
  327.     FKermitTimeoutSecs : Word;           {Packet timeout in seconds}
  328.     FKermitPadCharacter : Char;          {Pad character}
  329.     FKermitPadCount   : Word;            {Padding count}
  330.     FKermitTerminator : Char;            {Packet terminator character (ASCII)}
  331.     FKermitCtlPrefix  : Char;            {Control char prefix (ASCII value)}
  332.     FKermitHighbitPrefix : Char;         {Hibit prefix (ASCII value)}
  333.     FKermitRepeatPrefix : Char;          {Repeat prefix (ASCII value)}
  334.     FAsciiCharDelay   : Word;            {Inter-character delay}
  335.     FAsciiLineDelay   : Word;            {Inter-line delay}
  336.     FAsciiEOLChar     : Char;            {End-of-line character (ASCII value)}
  337.     FAsciiCRTranslation : TAsciiEOLTranslation; {ASCII translate CR}
  338.     FAsciiLFTranslation : TAsciiEOLTranslation; {ASCII translate LF}
  339.     FAsciiEOFTimeout  : Word;            {Ticks to assume EOF}
  340.  
  341.     {Events}
  342.     FOnProtocolAccept   : TProtocolAcceptEvent;
  343.     FOnProtocolError    : TProtocolErrorEvent;
  344.     FOnProtocolFinish   : TProtocolFinishEvent;
  345.     FOnProtocolLog      : TProtocolLogEvent;
  346.     FOnProtocolNextFile : TProtocolNextFileEvent;
  347.     FOnProtocolResume   : TProtocolResumeEvent;
  348.     FOnProtocolStatus   : TProtocolStatusEvent;
  349.  
  350.     procedure CreateMessageHandler;
  351.     procedure CheckPort;
  352.  
  353.   protected
  354.     {Misc protected methods}
  355.     procedure Notification(AComponent : TComponent; Operation: TOperation);
  356.       override;
  357.  
  358.     {Property methods}
  359.     procedure SetComPort(const NewComPort : TApdCustomComPort);
  360.     procedure SetProtocolType(const NewProtocol : TProtocolType);
  361.     function GetDestinationDirectory : String;
  362.     procedure SetDestinationDirectory(const NewDir : String);
  363.     function GetFileMask : TFileName;
  364.     procedure SetFileMask(const NewFileMask : TFileName);
  365.     function GetBatch : Boolean;
  366.     function GetBlockCheckMethod : TBlockCheckMethod;
  367.     procedure SetBlockCheckMethod(const NewMethod : TBlockCheckMethod);
  368.     function GetHandshakeRetry : Word;
  369.     procedure SetHandshakeRetry(const NewRetry : Word);
  370.     function GetHandshakeWait : Word;
  371.     procedure SetHandshakeWait(const NewWait : Word);
  372.     function GetBlockLength : Word;
  373.     function GetBlockNumber : Word;
  374.     function GetTransmitTimeout : Word;
  375.     procedure SetTransmitTimeout(const NewTimeout : Word);
  376.     function GetFinishWait : Word;
  377.     procedure SetFinishWait(const NewWait : Word);
  378.     function GetActualBPS : LongInt;
  379.     procedure SetActualBPS(const NewBPS : Longint);
  380.     function GetTurnDelay : Word;
  381.     procedure SetTurnDelay(const NewDelay : Word);
  382.     function GetOverhead : Word;
  383.     procedure SetOverhead(const NewOverhead : Word);
  384.     function GetWriteFailAction : TWriteFailAction;
  385.     procedure SetWriteFailAction(const NewAction : TWriteFailAction);
  386.     function GetProtocolStatus : Word;
  387.     function GetProtocolError : SmallInt;
  388.     function GetFileLength : LongInt;
  389.     function GetFileDate : TDateTime;
  390.     function GetInitialPosition : LongInt;
  391.     function GetStatusInterval : Word;
  392.     procedure SetStatusInterval(const NewInterval : Word);
  393.     procedure SetStatusDisplay(const NewDisplay : TApdAbstractStatus);
  394.     procedure SetProtocolLog(const NewLog : TApdProtocolLog);
  395.     function GetInProgress : Boolean;
  396.     function GetBlockErrors : Word;
  397.     function GetTotalErrors : Word;
  398.     function GetBytesRemaining : LongInt;
  399.     function GetBytesTransferred : LongInt;
  400.     function GetElapsedTicks : LongInt;
  401.     function GetFileName : String;
  402.     procedure SetFileName(const NewName : String);
  403.     function GetXYmodemBlockWait : Word;
  404.     procedure SetXYmodemBlockWait(const NewWait : Word);
  405.     function GetZmodemOptionOverride : Boolean;
  406.     procedure SetZmodemOptionOverride(const NewOverride : Boolean);
  407.     function GetZmodemSkipNoFile : Boolean;
  408.     procedure SetZmodemSkipNoFile(const NewSkip : Boolean);
  409.     function GetZmodemFileOption : TZmodemFileOptions;
  410.     procedure SetZmodemFileOption(const NewOpt : TZmodemFileOptions);
  411.     function GetZmodemRecover : Boolean;
  412.     procedure SetZmodemRecover(const NewRecover : Boolean);
  413.     function GetZmodem8K : Boolean;
  414.     procedure SetZmodem8K(const New8K : Boolean);
  415.     function GetZmodemFinishRetry : Word;
  416.     procedure SetZmodemFinishRetry(const NewRetry : Word);
  417.     function GetKermitMaxLen : Word;
  418.     procedure SetKermitMaxLen(const NewLen : Word);
  419.     function GetKermitMaxWindows : Word;
  420.     procedure SetKermitMaxWindows(const NewMax : Word);
  421.     function GetKermitSWCTurnDelay : Word;
  422.     procedure SetKermitSWCTurnDelay(const NewDelay : Word);
  423.     function GetKermitTimeoutSecs : Word;
  424.     procedure SetKermitTimeoutSecs(const NewTimeout : Word);
  425.     function GetKermitPadCharacter : Char;
  426.     procedure SetKermitPadCharacter(NewChar : Char);
  427.     function GetKermitPadCount : Word;
  428.     procedure SetKermitPadCount(NewCount : Word);
  429.     function GetKermitTerminator : Char;
  430.     procedure SetKermitTerminator(const NewTerminator : Char);
  431.     function GetKermitCtlPrefix : Char;
  432.     procedure SetKermitCtlPrefix(const NewPrefix : Char);
  433.     function GetKermitHighbitPrefix : Char;
  434.     procedure SetKermitHighbitPrefix(const NewPrefix : Char);
  435.     function GetKermitRepeatPrefix : Char;
  436.     procedure SetKermitRepeatPrefix(const NewPrefix : Char);
  437.     function GetKermitWindowsTotal : Word;
  438.     function GetKermitWindowsUsed : Word;
  439.     function GetKermitLongBlocks : Boolean;
  440.     function GetAsciiCharDelay : Word;
  441.     procedure SetAsciiCharDelay(const NewDelay : Word);
  442.     function GetAsciiLineDelay : Word;
  443.     procedure SetAsciiLineDelay(const NewDelay : Word);
  444.     function GetAsciiEOLChar : Char;
  445.     procedure SetAsciiEOLChar(const NewChar : Char);
  446.     function GetAsciiCRTranslation : TAsciiEOLTranslation;
  447.     procedure SetAsciiCRTranslation(const NewTrans : TAsciiEOLTranslation);
  448.     function GetAsciiLFTranslation : TAsciiEOLTranslation;
  449.     procedure SetAsciiLFTranslation(const NewTrans : TAsciiEOLTranslation);
  450.     function GetAsciiEOFTimeout : Word;
  451.     procedure SetAsciiEOFTimeout(const NewTimeout : Word);
  452.     function GetHonorDirectory : Boolean;
  453.     procedure SetHonorDirectory(const NewOpt : Boolean);
  454.     function GetIncludeDirectory : Boolean;
  455.     procedure SetIncludeDirectory(const NewOpt : Boolean);
  456.     function GetRTSLowForWrite : Boolean;
  457.     procedure SetRTSLowForWrite(const NewOpt : Boolean);
  458.     function GetAbortNoCarrier : Boolean;
  459.     procedure SetAbortNoCarrier(const NewOpt : Boolean);
  460.     function GetBP2KTransmit : Boolean;
  461.     procedure SetBP2KTransmit(const NewOpt : Boolean);
  462.     function GetAsciiSuppressCtrlZ : Boolean;
  463.     procedure SetAsciiSuppressCtrlZ(const NewOpt : Boolean);
  464.  
  465.     {Protocol event methods}
  466.     procedure apwProtocolAccept(CP : TObject; var Accept : Boolean;
  467.                                 var FName : String); virtual;
  468.     procedure apwProtocolError(CP : TObject; ErrorCode : SmallInt); virtual;
  469.     procedure apwProtocolFinish(CP : TObject; ErrorCode : SmallInt); virtual;
  470.     procedure apwProtocolLog(CP : TObject; Log : Word); virtual;
  471.     procedure apwProtocolNextFile(CP : TObject; var FName : String); virtual;
  472.     procedure apwProtocolResume(CP : TObject;
  473.                                 var Resume : TWriteFailAction); virtual;
  474.     procedure apwProtocolStatus(CP : TObject; Options : Word); virtual;
  475.  
  476.   public
  477.     constructor Create(AOwner : TComponent); override;
  478.       {-Create a TApdProtocol component}
  479.     destructor Destroy; override;
  480.       {-Destroy a TApdProtocol component}
  481.     procedure Assign(Source : TPersistent); override;
  482.       {-Assign fields from TApdProtocol object specified by Source}
  483.     {.Z-}
  484.     function EstimateTransferSecs(const Size : Longint) : Longint;
  485.       {-Return the number of seconds to transmit Size bytes}
  486.     function StatusMsg(const Status : Word) : String;
  487.       {-Return a status message for Status}
  488.     procedure StartTransmit;
  489.       {-Start a background transmit session}
  490.     procedure StartReceive;
  491.       {-Start a background receive session}
  492.     procedure CancelProtocol;
  493.       {-Cancel the background protocol session}
  494.  
  495.     {B+ methods}
  496.     procedure ProcessENQ;
  497.       {-Process the <ENQ> character for a B+ protocol}
  498.     procedure ProcessESCI(const X, Y : Byte);
  499.       {-Process the <ESC>I sequence for a B+ protocol}
  500.     procedure PrepareProcessDLE(var ATimerIndex : Word);
  501.       {-Prepare to process a <DLE> sequence for a B+ protocol}
  502.     procedure ProcessDLE(const IsData : Boolean;
  503.                          var Ready, Start, Upload : Boolean);
  504.       {-Process a <DLE> sequence for a B+ protocol}
  505.  
  506.     {General properties}
  507.     property ComPort : TApdCustomComPort
  508.       read FComPort write SetComPort;
  509.  
  510.     {General protocol control properties}
  511.     property ProtocolType : TProtocolType
  512.       read FProtocolType write SetProtocolType; {default DefProtocolType;}{!!.01}
  513.     property DestinationDirectory : String
  514.       read GetDestinationDirectory write SetDestinationDirectory;
  515.     property FileMask : TFileName
  516.       read GetFileMask write SetFileMask;
  517.     property BlockCheckMethod : TBlockCheckMethod
  518.       read GetBlockCheckMethod write SetBlockCheckMethod;
  519.     property HandshakeRetry : Word
  520.       read GetHandshakeRetry write SetHandshakeRetry default DefHandshakeRetry;
  521.     property HandshakeWait : Word
  522.       read GetHandshakeWait write SetHandshakeWait default DefHandshakeWait;
  523.     property TransmitTimeout : Word
  524.       read GetTransmitTimeout write SetTransmitTimeout default DefTransTimeout;
  525.     property FinishWait : Word
  526.       read GetFinishWait write SetFinishWait default DefFinishWait;
  527.     property ActualBPS : Longint
  528.       read GetActualBPS write SetActualBPS;
  529.     property TurnDelay : Word
  530.       read GetTurnDelay write SetTurnDelay default DefTurnDelay;
  531.     property Overhead : Word
  532.       read GetOverhead write SetOverhead default DefOverhead;
  533.     property WriteFailAction : TWriteFailAction
  534.       read GetWriteFailAction write SetWriteFailAction
  535.       default DefWriteFailAction;
  536.  
  537.     {Option properties}
  538.     property HonorDirectory : Boolean
  539.       read GetHonorDirectory write SetHonorDirectory
  540.       default DefHonorDirectory;
  541.     property IncludeDirectory : Boolean
  542.       read GetIncludeDirectory write SetIncludeDirectory
  543.       default DefIncludeDirectory;
  544.     property RTSLowForWrite : Boolean
  545.       read GetRTSLowForWrite write SetRTSLowForWrite
  546.       default DefRTSLowForWrite;
  547.     property AbortNoCarrier : Boolean
  548.       read GetAbortNoCarrier write SetAbortNoCarrier
  549.       default DefAbortNoCarrier;
  550.     property BP2KTransmit : Boolean
  551.       read GetBP2KTransmit write SetBP2KTransmit
  552.       default DefBP2KTransmit;
  553.     property AsciiSuppressCtrlZ : Boolean
  554.       read GetAsciiSuppressCtrlZ write SetAsciiSuppressCtrlZ
  555.       default DefAsciiSuppressCtrlZ;
  556.  
  557.     {Read only properties}
  558.     property Batch : Boolean
  559.       read GetBatch;
  560.     property BlockLength : Word
  561.       read GetBlockLength;
  562.     property BlockNumber : Word
  563.       read GetBlockNumber;
  564.     property ProtocolStatus : Word
  565.       read GetProtocolStatus;
  566.     property ProtocolError : SmallInt
  567.       read GetProtocolError;
  568.     property FileLength : LongInt
  569.       read GetFileLength;
  570.     property FileDate : TDateTime
  571.       read GetFileDate;
  572.     property InitialPosition : LongInt
  573.       read GetInitialPosition;
  574.  
  575.     {Status properties}
  576.     property StatusDisplay : TApdAbstractStatus
  577.       read FStatusDisplay write SetStatusDisplay;
  578.     property ProtocolLog : TApdProtocolLog
  579.       read FProtocolLog write SetProtocolLog;
  580.     property StatusInterval : Word
  581.       read GetStatusInterval write SetStatusInterval default DefStatusInterval;
  582.     property InProgress : Boolean
  583.       read GetInProgress;
  584.     property BlockErrors : Word
  585.       read GetBlockErrors;
  586.     property TotalErrors : Word
  587.       read GetTotalErrors;
  588.     property BytesRemaining : LongInt
  589.       read GetBytesRemaining;
  590.     property BytesTransferred : LongInt
  591.       read GetBytesTransferred;
  592.     property ElapsedTicks : LongInt
  593.       read GetElapsedTicks;
  594.     property FileName : String
  595.       read GetFileName write SetFileName;
  596.  
  597.     {Xmodem/Ymodem properties}
  598.     property XYmodemBlockWait : Word
  599.       read GetXYmodemBlockWait write SetXYmodemBlockWait
  600.       default DefXYmodemBlockWait;
  601.  
  602.     {Zmodem properties}
  603.     property ZmodemOptionOverride : Boolean
  604.       read GetZmodemOptionOverride write SetZmodemOptionOverride
  605.       default DefZmodemOptionOverride;
  606.     property ZmodemSkipNoFile : Boolean
  607.       read GetZmodemSkipNoFile write SetZmodemSkipNoFile
  608.       default DefZmodemSkipNoFile;
  609.     property ZmodemFileOption : TZmodemFileOptions
  610.       read GetZmodemFileOption write SetZmodemFileOption
  611.       default DefZmodemFileOption;
  612.     property ZmodemRecover : Boolean
  613.       read GetZmodemRecover write SetZmodemRecover default DefZmodemRecover;
  614.     property Zmodem8K : Boolean
  615.       read GetZmodem8K write SetZmodem8K default DefZmodem8K;
  616.     property ZmodemFinishRetry : Word
  617.       read GetZmodemFinishRetry write SetZmodemFinishRetry
  618.       default DefZmodemFinishRetry;
  619.  
  620.     {Kermit properties}
  621.     property KermitMaxLen : Word
  622.       read GetKermitMaxLen write setKermitMaxLen
  623.       default DefKermitMaxLen;
  624.     property KermitMaxWindows : Word
  625.       read GetKermitMaxWindows write SetKermitMaxWindows
  626.       default DefKermitMaxWindows;
  627.     property KermitSWCTurnDelay : Word
  628.       read GetKermitSWCTurnDelay write SetKermitSWCTurnDelay
  629.       default DefKermitSWCTurnDelay;
  630.     property KermitTimeoutSecs : Word
  631.       read GetKermitTimeoutSecs write SetKermitTimeoutSecs
  632.       default DefKermitTimeoutSecs;
  633.     property KermitPadCharacter : Char
  634.       read GetKermitPadCharacter write SetKermitPadCharacter
  635.       default DefKermitPadCharacter;
  636.     property KermitPadCount : Word
  637.       read GetKermitPadCount write SetKermitPadCount
  638.       default DefKermitPadCount;
  639.     property KermitTerminator : Char
  640.       read GetKermitTerminator write SetKermitTerminator
  641.       default DefKermitTerminator;
  642.     property KermitCtlPrefix : Char
  643.       read GetKermitCtlPrefix write SetKermitCtlPrefix
  644.       default DefKermitCtlPrefix;
  645.     property KermitHighbitPrefix : Char
  646.       read GetKermitHighbitPrefix write SetKermitHighbitPrefix
  647.       default DefKermitHighbitPrefix;
  648.     property KermitRepeatPrefix : Char
  649.       read GetKermitRepeatPrefix write SetKermitRepeatPrefix
  650.       default DefKermitRepeatPrefix;
  651.     property KermitWindowsTotal : Word
  652.       read GetKermitWindowsTotal;
  653.     property KermitWindowsUsed : Word
  654.       read GetKermitWindowsUsed;
  655.     property KermitLongBlocks : Boolean
  656.       read GetKermitLongBlocks;
  657.     property AsciiCharDelay : Word
  658.       read GetAsciiCharDelay write SetAsciiCharDelay
  659.       default DefAsciiCharDelay;
  660.     property AsciiLineDelay : Word
  661.       read GetAsciiLineDelay write SetAsciiLineDelay
  662.       default DefAsciiLineDelay;
  663.     property AsciiEOLChar : Char
  664.       read GetAsciiEOLChar write SetAsciiEOLChar
  665.       default DefAsciiEOLChar;
  666.     property AsciiCRTranslation : TAsciiEOLTranslation
  667.       read GetAsciiCRTranslation write SetAsciiCRTranslation
  668.       default DefAsciiCRTranslation;
  669.     property AsciiLFTranslation : TAsciiEOLTranslation
  670.       read GetAsciiLFTranslation write SetAsciiLFTranslation
  671.       default DefAsciiLFTranslation;
  672.     property AsciiEOFTimeout : Word
  673.       read GetAsciiEOFTimeout write SetAsciiEOFTimeout
  674.       default DefAsciiEOFTimeout;
  675.  
  676.     {Protocol events}
  677.     property OnProtocolAccept : TProtocolAcceptEvent
  678.       read FOnProtocolAccept write FOnProtocolAccept;
  679.     property OnProtocolError : TProtocolErrorEvent
  680.       read FOnProtocolError write FOnProtocolError;
  681.     property OnProtocolFinish : TProtocolFinishEvent
  682.       read FOnProtocolFinish write FOnProtocolFinish;
  683.     property OnProtocolLog : TProtocolLogEvent
  684.       read FOnProtocolLog write FOnProtocolLog;
  685.     property OnProtocolNextFile : TProtocolNextFileEvent
  686.       read FOnProtocolNextFile write FOnProtocolNextFile;
  687.     property OnProtocolResume : TProtocolResumeEvent
  688.       read FOnProtocolResume write FOnProtocolResume;
  689.     property OnProtocolStatus : TProtocolStatusEvent
  690.       read FOnProtocolStatus write FOnProtocolStatus;
  691.   end;
  692.  
  693.   {Protocol component}
  694.   TApdProtocol = class(TApdCustomProtocol)
  695.   published
  696.     property ComPort;
  697.     property ProtocolType;
  698.     property DestinationDirectory;
  699.     property FileMask;
  700.     property BlockCheckMethod;
  701.     property HandshakeRetry;
  702.     property HandshakeWait;
  703.     property TransmitTimeout;
  704.     property FinishWait;
  705.     property TurnDelay;
  706.     property Overhead;
  707.     property WriteFailAction;
  708.     property HonorDirectory;
  709.     property IncludeDirectory;
  710.     property RTSLowForWrite;
  711.     property AbortNoCarrier;
  712.     property BP2KTransmit;
  713.     property AsciiSuppressCtrlZ;
  714.     property StatusDisplay;
  715.     property ProtocolLog;
  716.     property StatusInterval;
  717.     property FileName;
  718.     property XYmodemBlockWait;
  719.     property ZmodemOptionOverride;
  720.     property ZmodemSkipNoFile;
  721.     property ZmodemFileOption;
  722.     property ZmodemRecover;
  723.     property Zmodem8K;
  724.     property ZmodemFinishRetry;
  725.     property KermitMaxLen;
  726.     property KermitMaxWindows;
  727.     property KermitSWCTurnDelay;
  728.     property KermitTimeoutSecs;
  729.     property KermitPadCharacter;
  730.     property KermitPadCount;
  731.     property KermitTerminator;
  732.     property KermitCtlPrefix;
  733.     property KermitHighbitPrefix;
  734.     property KermitRepeatPrefix;
  735.     property AsciiCharDelay;
  736.     property AsciiLineDelay;
  737.     property AsciiEOLChar;
  738.     property AsciiCRTranslation;
  739.     property AsciiLFTranslation;
  740.     property AsciiEOFTimeout;
  741.     property OnProtocolAccept;
  742.     property OnProtocolError;
  743.     property OnProtocolFinish;
  744.     property OnProtocolLog;
  745.     property OnProtocolNextFile;
  746.     property OnProtocolResume;
  747.     property OnProtocolStatus;
  748.   end;
  749.  
  750.   {.Z+}
  751.   {A list of active TApdProtocol objects}
  752.   PProtocolWindowNode = ^TProtocolWindowNode;
  753.   TProtocolWindowNode = record
  754.     pwWindow   : HWnd;
  755.     pwProtocol : TApdCustomProtocol;
  756.   end;
  757.  
  758.   {Miscellaneous functions}
  759.   function CheckNameString(const Check : TBlockCheckMethod) : String;
  760.   function FormatMinSec(const TotalSecs : LongInt) : String;
  761.   {.Z-}
  762.   function ProtocolName(const ProtocolType : TProtocolType) : String;
  763.  
  764.   {Component registration procedure}
  765.   procedure Register;
  766.  
  767.